// JS 对象序列化 a=1&b=2
export function objectToQueryString(obj) {
    return Object.keys(obj)
        .map((key) => {
            return `${key}=${obj[key]}`;
        })
        .join('&');
}

// 返回上一级
export function navigateBack(){
	const pages = getCurrentPages()
	// 没有上一级
	if (pages.length <= 1) {
		uni.reLaunch({
			url:'/pages/my/my',
		})
	}else{
		uni.navigateBack({
			delta:1
		})
	}
}
/**
 * js计算 解决丢失精度
 */

//加  
export function floatAdd(arg1,arg2){
  var r1,r2,m;
  try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
  try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
  m=Math.pow(10,Math.max(r1,r2));
  return (arg1*m+arg2*m)/m;
}
//减  
export function floatSub(arg1,arg2){
  var r1,r2,m,n;
  try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
  try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
  m=Math.pow(10,Math.max(r1,r2));
  //动态控制精度长度  
  n=(r1>=r2)?r1:r2;
  return ((arg1*m-arg2*m)/m).toFixed(n);
}
//乘  
export function floatMul(arg1,arg2)   {
  var m=0,s1=arg1.toString(),s2=arg2.toString();
  try{m+=s1.split(".")[1].length}catch(e){}
  try{m+=s2.split(".")[1].length}catch(e){}
  return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}
//除 
export function floatDiv(arg1,arg2){
  var t1=0,t2=0,r1,r2;
  try{t1=arg1.toString().split(".")[1].length}catch(e){}
  try{t2=arg2.toString().split(".")[1].length}catch(e){}
  r1=Number(arg1.toString().replace(".",""));
  r2=Number(arg2.toString().replace(".",""));
  return(r1/r2)*Math.pow(10,t2-t1);
}


/**
 * 时间格式化函数
 * @param {Date|string|number} time - 时间参数（支持Date对象、时间戳、ISO格式字符串）
 * @returns {Object} 包含多种日期格式的JSON对象
 */
export function formatTime(time) {
  // 创建Date对象
  let date;
  if (time instanceof Date) {
    date = time;
  } else if (typeof time === 'number' || /^\d+$/.test(time)) {
    date = new Date(Number(time));
  } else {
    date = new Date(time);
  }
  
  // 校验日期有效性
  if (isNaN(date.getTime())) {
    throw new Error('Invalid date input');
  }
  
  // 日期组件
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const hours = date.getHours();
  const minutes = date.getMinutes();
  const seconds = date.getSeconds();
  const milliseconds = date.getMilliseconds();
  const dayOfWeek = date.getDay();
  
  // 星期映射
  const weekdays = ['日', '一', '二', '三', '四', '五', '六'];
  
  // 补零函数
  const padZero = num => num.toString().padStart(2, '0');
  
  // 12小时制转换
  const period = hours >= 12 ? 'PM' : 'AM';
  const hours12 = hours % 12 || 12;
  
  return {
    date: `${year}-${padZero(month)}-${padZero(day)}`,             // 标准日期格式 2025-05-28
    dateSlash: `${year}/${padZero(month)}/${padZero(day)}`,             // 标准日期格式 2025/05/28
    dateCN: `${year}年${month}月${day}日`,                        // 中文日期 2025年5月28日
    time: `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`, // 时间 10:30:15
    time12: `${hours12}:${padZero(minutes)}:${padZero(seconds)} ${period}`, // 12小时制时间 10:30:15 AM
    dateTime: `${year}-${padZero(month)}-${padZero(day)} ${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`, // 完整日期时间
    iso: date.toISOString(),                                      // ISO格式 2025-05-28T02:30:15.000Z
    timestamp: date.getTime(),                                    // 时间戳 1745793015000
    year, month, day, hours, minutes, seconds, milliseconds,      // 日期组件
    weekday: `星期${weekdays[dayOfWeek]}`,                         // 星期 星期三
    weekdayIndex: dayOfWeek,                                      // 星期索引 (0-6)
    dayOfYear: Math.floor((date - new Date(year, 0, 0)) / 86400000) // 年内第几天
  };
  
  
  // 使用示例
  // console.log(formatTime(new Date()));
  /*
  输出：
  {
    date: "2025-05-28",
    dateCN: "2025年5月28日",
    time: "10:30:15",
    time12: "10:30:15 AM",
    dateTime: "2025-05-28 10:30:15",
    iso: "2025-05-28T02:30:15.000Z",
    timestamp: 1745793015000,
    year: 2025,
    month: 5,
    day: 28,
    hours: 10,
    minutes: 30,
    seconds: 15,
    milliseconds: 0,
    weekday: "星期三",
    weekdayIndex: 3,
    dayOfYear: 148
  }
  */
}


/**
 * 拆分金额为整数和小数部分
 * @param {number|string} amount - 金额（数字或字符串）
 * @returns {Object} 包含整数部分和小数部分的对象
 */
export function splitAmount(amount) {
  // 转换为字符串并去除首尾空格
  let amountStr = typeof amount === 'number' ? amount.toString() : amount.trim();
  
  // 处理空字符串情况
  if (amountStr === '') {
    return { integer: '0', decimal: '00' };
  }

  // 处理负号标记
  let hasNegative = amountStr.startsWith('-');
  if (hasNegative) {
    amountStr = amountStr.substring(1); // 移除负号
    if (amountStr === '') return { integer: '0', decimal: '00' }; // 单独负号情况
  }

  // 分割整数和小数部分
  const parts = amountStr.split('.');
  let integerPart = parts[0] || '0';  // 整数部分（为空时设为0）
  let decimalPart = parts[1] || '';   // 小数部分

  // 处理负号
  if (hasNegative) {
    integerPart = '-' + integerPart;
  }

  // 小数部分处理：截取前两位，不足补零
  decimalPart = decimalPart.substring(0, 2).padEnd(2, '0');

  // 特殊处理纯负零情况（如 "-0", "-0.00"）
  if (integerPart === '-0' && decimalPart === '00') {
    integerPart = '0';
  }

  return {
    integer: integerPart,
    decimal: decimalPart
  };
}
